package rhino;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.FileReader;
import java.net.URL;
import java.util.List;

/**
 * 测试脚本引擎:JavaScript代码
 */
public class Test {
    public static void main(String[] args) throws Exception{
        //获得脚本引擎对象
        ScriptEngineManager sem=new ScriptEngineManager();
        ScriptEngine engine=sem.getEngineByName("javascript");
        //定义变量,存储到引擎上下文里
        engine.put("msg","nnn");
        //写脚本语言
        String str="var user = {name:'lqk',age:22,school:'Jxust'};";
        str+="print(user.name);";

        //执行脚本语言
        engine.eval(str);
        engine.eval("msg='lqk study!'");
        System.out.println(engine.get("msg"));

        //定义函数
        engine.eval("function add(a,b){var sum=a+b;return sum;}");
        //取得调用接口
        Invocable jsInvoke=(Invocable)engine;
        //执行js函数:执行脚本中定义的方法
        Object result1=jsInvoke.invokeFunction("add",new Object[]{12,23});
        System.out.println(result1);

        //导入其他java包,使用其他包中的java类
        String jsCode="var list=java.util.Arrays.asList([\"jxust\",\"hndx\"]);";
        engine.eval(jsCode);

        List<String> list2=(List<String>)engine.get("list");
        for (String temp:list2) {
            System.out.println(temp);
        }
        //执行一个js文件
        URL url=Test.class.getClassLoader().getResource("a.js");
        FileReader fr=new FileReader(url.getPath());
        engine.eval(fr);
        fr.close();
    }
}
